/**
 * 
 */
package mm.back.service.impl;

import java.util.List;

import mm.back.dao.RubroDAO;
import mm.back.entity.Rubro;
import mm.back.filtros.RubrosFiltro;
import mm.back.service.MMAbstractService;
import mm.back.service.RubroService;
import mm.exceptions.MMGenericException;

/**
 * @author PUSDERKIS
 * 
 */
public class RubroServiceImpl extends MMAbstractService implements RubroService {

	private RubroDAO rubroDAO;

	/**
	 * @see mm.back.service.RubroService#createRubro(java.lang.String)
	 */
	public Rubro createRubro(String descripcion) throws MMGenericException {
		Rubro rubro = null;
		if (descripcion != null) {
			rubro = rubroDAO.searchRubro(descripcion);
			
			if (rubro != null && rubro.getActivo() == true) {
				throw new MMGenericException("El rubro ingresado ya existe");
			} else if (rubro != null && rubro.getActivo() != true) {
				rubro.setActivo(true);
				rubroDAO.saveRubro(rubro);
			} else if (rubro == null) {
				rubro = rubroDAO.createRubro(descripcion);
			}
		} else {
			throw new MMGenericException("No se ha ingresado ningún nombre"); 
		}
		return rubro;
	}

	/**
	 * @param rubroDAO
	 *            the rubroDAO to set
	 */
	public void setRubroDAO(RubroDAO rubroDAO) {
		this.rubroDAO = rubroDAO;
	}

	public void filtrarNombre(String nombre) throws MMGenericException {
		if (nombre != null && !"".equals(nombre)) {
			rubroDAO.filtrarNombre(nombre);
		} else {
			throw new MMGenericException(
					"Debe ingresar una descripcción para el Rubro.");
		}
	}

	public void deleteRubro(Long id) throws MMGenericException {
		if (logger.isDebugEnabled()) {
			logger.debug("Se intenta desactivar el producto con id: " + id);
		}
				
		
		Rubro rubro = getRubro(id);
		rubro.setActivo(Boolean.FALSE);
		rubroDAO.saveRubro(rubro);
		if (logger.isDebugEnabled()) {
			logger.debug("Se desactivo el producto " + rubro.getId()
					+ " con exito.");
		}
	}

	public void filtrarActivo(Boolean activo) throws MMGenericException {
		// TODO Auto-generated method stub

	}

	public void resetearFiltro(String nombre, Boolean activo)
			throws MMGenericException {
		// TODO Auto-generated method stub

	}

	/**
	 * @see mm.back.service.RubroService#searchRubros(mm.back.filtros.RubrosFiltro)
	 */
	public List<Rubro> searchRubros(RubrosFiltro filtro)
			throws MMGenericException {

		return rubroDAO.findRubros(filtro);
	}

	/**
	 * @see mm.back.service.RubroService#getRubro(java.lang.Long)
	 */
	public Rubro getRubro(Long id) throws MMGenericException {
		return rubroDAO.getRubro(id);
	}

	public Rubro saveRubro(Rubro rubro) throws MMGenericException {
		if (logger.isDebugEnabled()) {
			logger.debug("Se esta guardando el rubro.");
		}
		rubroDAO.saveRubro(rubro);

		if (logger.isDebugEnabled()) {
			logger.debug("El rubro fue guardado con exito.");
		}
		return null;
	}
}
